class Cat:
    # 类属性
    # 私有属性
    __name = "小猫"
    # 公有属性
    leg = 4
    tail = 1
    eye = 2

# 访问类属性
# 通过 类名.属性名 访问
# 注意：私有属性在外部是无法访问到的
# print(Cat.__name) # AttributeError: type object 'Cat' has no attribute '__name'
print("leg:", Cat.leg)
print("tail:", Cat.tail)
print("eye:", Cat.eye)

print("=" * 50)
# 通过 对象.属性名 访问
c1 = Cat()
# 私有属性在实例对象中是无法访问的
# print("name:", c1.__name) # AttributeError: 'Cat' object has no attribute '__name'
print("leg:", c1.leg)
print("tail:", c1.tail)
print("eye:", c1.eye)

print("=" * 50)
class Dog:
    # 私有属性
    __attr = "小狗"

    # 定义类方法
    @classmethod
    def get_attr(cls):
        # 私有属性在类中是可以访问的
        print(cls.__attr)

# 使用类名调用类方法
Dog.get_attr()
# 使用对象调用类方法
d1 = Dog()
d1.get_attr()

print("=" * 50)
class Student:

    # 静态方法
    @staticmethod
    def static_method():
        print("静态方法")

# 使用类访问静态方法
Student.static_method()
# 使用对象访问静态方法
s1 = Student()
s1.static_method()

print("=" * 50)
class Person:
    # 实例方法
    def instance_method(self):
        print("实例方法")

# 实例方法只能由对象来调用
p1 = Person()
p1.instance_method()